import axios from "axios";
import { message } from "antd";
import store2 from "store2";

// 创建一个 axios 的实例对象
export const request = axios.create({
  timeout: 3000,
  baseURL: import.meta.env.VITE_API_BASE_URL,
});

// 请求拦截
request.interceptors.request.use((config) => {
  // 获取一下 token
  const token = store2.get("token");
  // 如果存在token,则携带到请求头中
  if (token) {
    config.headers.Authorization = token;
  }
  return config;
});

// 响应拦截
request.interceptors.response.use(
  (response) => {
    // 直接解构出接口返回的数据
    const { data } = response;
    // 解构出接口返回的 code(业务状态码) 与 message(业务状态码描述)
    const { code, message: msg } = data;
    // 根据不同的 code 处理业务逻辑
    switch (code) {
      case 1000:
        // 成功
        return data.data;
      default:
        // 一律出错
        message.error(msg);
        return Promise.reject(data);
    }
  },
  (error) => {
    // 根据不同的 http 状态码做处理
    //  1. 获取 http 状态码
    const { status } = error.response;
    //  2. 处理
    switch (status) {
      case 401:
        // 登录过期，token有问题，直接跳转到登录页面
        store2.remove("token"); // ...
        location.href = "/login";
        return Promise.reject(error);
      default:
        message.error(error.message);
        return Promise.reject(error);
    }
  }
);
